import axios from 'axios'
import { getToken, removeToken } from './cookie';
import router from '@/router';

// 不同的功能，通过axios请求的是不同接口的地址
// 127.0.0.1:19090
axios.defaults.headers["Content-Type"] = "application/json;charset=utf-8";

const service = axios.create({
    baseURL: "/dev-api",
    timeout: 5000, // x秒后返回超时，提高用户体验
})

//请求拦截器
service.interceptors.request.use(
    (config) => {
        if (getToken()) {
            config.headers["Authorization"] = "Bearer " + getToken();
        }
        return config;
    },
    (error) => {
        console.log(error)
        Promise.reject(error);
    }
);

//响应拦截器
service.interceptors.response.use(
    (res) => {
        // 未设置状态码则默认成功状态
        const code = res.data.code;
        const msg = res.data.msg;
        if (code === 3001) {
            ElMessage.error(msg);
            removeToken()
            router.push('/oj/login')
            return Promise.reject(new Error(msg)); // 抛出异常
        } else if (code !== 1000) {
            ElMessage.error(msg);
            return Promise.reject(new Error(msg)); // 抛出异常
        } else {
            return Promise.resolve(res.data); // 解包一层
        }
    },
    (error) => {
        return Promise.reject(error);
    }
);

export default service // 通过service暴露出去，供其他模块引用

// http://localhost:5173/dev-api/sysUser/login


// 同源策略
// 同源策略指的就是，浏览器出于安全考虑，实施的一种策略，即只允许来自同一源(即协议+域名+端口都相同)的请求访问资源。否则就会导致致跨域问题
// 例如 http://xxxx.com -> https://xxxx.com 存在跨域 协议不同
// 例如 127.x.x.x:8001 -> 127.x.x.x:8002 存在跨域 端口不同
// 例如 www.xxxx.com -> www.yyyy.com 存在跨域 域名不同

// 解决方案：前端（浏览器） -> 配置代理服务器 -> 后端